#ifndef _TURNSDATAMODEL_H
#define _TURNSDATAMODEL_H
#include <windows.h>
#include <string>
#include <DirectXMath.h>

using namespace DirectX;

namespace TurnsDataModel {

	static const TCHAR * WINDOW_TITLE = TEXT("TurnsGalore");
	static const TCHAR * WINDOW_CLASS_NAME = TEXT("TurnsWindow");
	static const int WINDOW_DEFAULT_WIDTH = 1280;
	static const int WINDOW_DEFAULT_HEIGHT = 720;
	static const int WINDOW_REFRESH_RATE = 60;
	static const float BACKGROUND_COLOR[4] = { 0.f, 0.f, 0.f, 1.f };

	static const TCHAR * MAP_FILES_PATH = TEXT("Data/Maps/");
	static const std::string MAP_FILES_PATH_STRING = "Data/Maps/";
	static const std::string OBJECTS_FILES_PATH_STRING = "Data/Objects/";
	static const std::string TEXTURES_FILES_PATH_STRING = "Data/Textures/";
	static const float MAP_TILE_SIZE = 1.0f;
	static const TCHAR * SAMPLE_MAP_FILE_PATH = TEXT("Data/Maps/sample.tgm");
	static const int MINIMUM_LAND_ID = 1000;
	static const char LOADER_COMMENT_CHARACTER = '#';
	static const char LOADER_CORNER_CHARACTER = 'c';
	static const char LOADER_LAND_CHARACTER = 'l';
	static const char LOADER_OBJECT_CHARACTER = 'o';
	static const char LOADER_TILE_CHARACTER = 't';
	static const char LOADER_VERTEX_CHARACTER = 'v';
	static const char LOADER_TEXTURE_CHARACTER = 't';
	static const char LOADER_NORMALS_CHARACTER = 'n';
	static const char LOADER_GROUP_CHARACTER = 'g';
	static const char LOADER_FACE_CHARACTER = 'f';
	static const char LOADER_MATERIAL_LIBRARY_FILENAME = 'm';
	static const char LOADER_USE_MATERIAL = 'u';
	static const char LOADER_SPACE_CHARACTER = ' ';
	static const char LOADER_SLASH_CHARACTER = '/';
	static const XMFLOAT4 LAND_GRASS_COLOR = XMFLOAT4(0.f, 0.4f, 0.f, 1.f);
	static const XMFLOAT4 LAND_PRAIRIE_COLOR = XMFLOAT4(0.6f, 0.6f, 0.f, 1.f);

	static const XMVECTOR CAMERA_POSITION = XMVectorSet(1.0f, 2.0f, -2.0f, 0.0f);
	static const XMVECTOR CAMERA_TARGET = XMVectorSet(1.0f, 0.0f, 2.0f, 0.0f);
	static const XMVECTOR CAMERA_UP = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);

	static const float PI = 3.14f;

	static const TCHAR * LOADER_MAP_STRUCTURE_ERROR_MESSAGE = TEXT("The map file has invalid data");
	static const TCHAR * WINDOW_ERROR_TITLE = TEXT("Critical Error");
	static const TCHAR * WINDOW_CLASS_REGISTER_ERROR = TEXT("Call to RegisterClassEx failed!");
	static const TCHAR * WINDOW_ERROR_FUNCTION = TEXT("GetProcessId");
	static const TCHAR * WINDOW_ERROR_FORMAT_MESSAGE = TEXT("%s failed with error %d: %s");
	static const TCHAR * DX11_DXGI_FACTORY_CREATION_ERROR_MESSAGE = TEXT("Couldn't create DXGI Factory");
	static const TCHAR * DX11_NO_SUPPORTED_VIDEO_CARD_MESSAGE = TEXT("There is no available video card that supports DirectX 11");
	static const TCHAR * DX11_GET_BUFFER_ERROR_MESSAGE = TEXT("Error when calling GetBuffer function");
	static const TCHAR * DX11_CREATE_BUFFER_ERROR_MESSAGE = TEXT("Error when calling CreateBuffer function");
	static const TCHAR * DX11_CREATE_RENDER_TARGET_VIEW_ERROR_MESSAGE = TEXT("Error when calling CreateRenderTargetView function");
	static const TCHAR * DX11_COMPILE_SHADER_ERROR_MESSAGE = TEXT("Error when trying to compile a shader");
	static const TCHAR * DX11_CREATE_VERTEX_SHADER_ERROR_MESSAGE = TEXT("Error when calling CreateVertexShader function");
	static const TCHAR * DX11_CREATE_PIXEL_SHADER_ERROR_MESSAGE = TEXT("Error when calling CreatePixelShader function");
	static const TCHAR * DX11_CREATE_INPUT_LAYOUT_ERROR_MESSAGE = TEXT("Error when calling CreateInputLayout function");
	static const TCHAR * DX11_CREATE_WIRE_FRAME_ERROR_MESSAGE = TEXT("Error when creating wire frame");
	static const TCHAR * DX11_CREATE_TEXTURE_ERROR_MESSAGE = TEXT("Error when calling create texture from file function");
};

#endif
